#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

/* 自定义信号处理
void myfun(int signum){
    int i=0;
    while (i<10)
    {
        printf("myfun signal %d,i=%d\n",signum,i);
        sleep(1);
        i++;
    }
}

int main(){
    printf("start\n");
    int i=0;
    signal(14,myfun);
    //signal(14,SIG_IGN)    //信号相应后不会进行任何处理

    alarm(9) ;  //九秒之后会运行我自己的myfun代码，myfun运行完后再回到主进程

    while (i<20)
    {
        i++ ;
        sleep(1) ;
        printf("main while i=%d\n",i);
    }
    
    printf("end\n");
    return 0;
}
*/

void myfun(int signum){
    int i=0;
    while (i<5)
    {
        printf("myfun signalnum=%d,i=%d\n",signum,i++);
        sleep(1);
    }
}

void myfun1(int signum){
    printf("myfun1 = %d\n",signum) ;
    wait(NULL) ;    //回收资源
}

int main(){
    printf("start\n");
    int i=0;

    pid_t pid;
    pid = fork() ;
    if(pid > 0){    
        signal(10,myfun);
        signal(17,myfun1);
        while (1)
        {
            printf("pid>0 i=%d\n",i);
            sleep(1);
            i++;
        }
        
    }
    if(pid == 0){   
        printf("pid == 0\n") ;
        sleep(10);
        kill(getppid(),10);
        sleep(10) ;
        exit(0);
    }
    
    printf("end\n");
    return 0;
}